package DB_operation

import (
	"fmt"
	"github.com/jinzhu/gorm"
	"github.com/spf13/viper"
)

// 连接数据库
func OpenDB() *gorm.DB {
	// 使用 Viper 从配置文件加载数据库配置
	sql_url := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=%t&loc=%s",
		viper.GetString("db.username"),
		viper.GetString("db.password"),
		viper.GetString("db.addr"),
		viper.GetString("db.name"),
		true,
		"Asia%2FShanghai",
	)
	//db:指向新打开的数据库连接的指针	 "mysql"数据库的类型为MySQL
	db, err := gorm.Open("mysql", sql_url)
	if err != nil {
		panic("Database connection failed: " + err.Error())
	}
	return db
}

// 创建结构体-保存多个数据库连接的
type Database struct {
	Self *gorm.DB
}

var DB *Database

func InitDB() {
	DB = &Database{
		Self: OpenDB(), //创建数据库连接
	}
	//automigrate 自动将程序定义好的数据模型迁移到数据库
	DB.Self.AutoMigrate(&UserInfo{}, &IndustryCode{}, &ProfessionCode{}, &DirectionCode{}, &Comment{})
}

// 关闭数据库连接
func Close() {
	DB.Self.Close()
}
